package Behaviours;

import teams.ucmTeam.Behaviour;
import teams.ucmTeam.RobotAPI;
import EDU.gatech.cc.is.util.Vec2;
import MaquinaEstados.MaquinaEstados;
import MaquinaEstados.MaquinasEstados.MaquinaEstadosAtacante;

public class ComportamientoAtacante extends Behaviour{
	
	/**
	 * Máquina de estados que gobierna el comportamiento
	 */
	private MaquinaEstados maquina;

	@Override
	public void configure() {
		
	}

	@Override
	public void end() {
		maquina.end();
	}

	@Override
	public void onInit(RobotAPI robot) {
		// Creamos la máquina en el onInit porque necesita tener acceso a la robotAPI
		maquina = new MaquinaEstadosAtacante(robot);
		if (!maquina.init()) {
			// Se ha producido un error en la inicialización de la máquina. Podemos mostrar mensaje de error
			;
		}
	}

	@Override
	public void onRelease(RobotAPI arg0) {
		// Do nothing		
	}
	
	public boolean ballInOpponentField(){
		boolean result = true;
		int mySide = myRobotAPI.getFieldSide();
		Vec2 posBall = myRobotAPI.toFieldCoordinates(myRobotAPI.getBall());
		double product = mySide * posBall.x;
		result = product < 0;
		return result;
	}

	@Override
	public int takeStep() {
//		Vec2 ball= myRobotAPI.getBall();		
//		if (ball.r<0.5) {
//			// Si estoy lo suficientemente cerca cambio a GoToBall
//			maquina.cambiarEstado("gotoball");			
//		}
//		else
//			// En otro caso paso a Wander
//			maquina.cambiarEstado("wander");
		
		//Si la pelota esta en campo rival, paso a comportamiento go to ball
		if (ballInOpponentField()){
			maquina.cambiarEstado("atacanteatacando");
		}else{
			//Si la pelota esta en mi campo, si estoy cerca bloqueo al contricante mas cercano,
			//si no, espero en el medio campo
			maquina.cambiarEstado("atacantedefendiendo");			
		
		}
		// delego siempre en la máquina de estados para ejecutar el takeStep
		maquina.takeStep();
		
		return RobotAPI.ROBOT_OK;
	}

}
